package com.xunsiya.controller.persons;

import com.alibaba.fastjson.JSONObject;
import com.xunsiya.common.config.RequestUtils;
import com.xunsiya.module.persons.vo.Persons;
import com.xunsiya.module.persons.vo.PersonsImage;
import com.xunsiya.service.module.persons.PersonsService;
import com.xunsiya.tools.common.msg.Msg;
import com.xunsiya.tools.common.pagination.ForePage;
import com.xunsiya.tools.common.string.StringUtil;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * 人物管理Controller
 *
 * @author panjun
 * @version 1.0
 *          <p>
 *          <p>修订人		修订时间			描述信息
 *          <p>-----------------------------------------------------
 *          <p>panjun		2018/11/2		初始创建
 */
@RestController
@RequestMapping("/api/persons")
public class PersonsController {

    @Autowired
    private PersonsService personsService;

    /**
     * 分页查询
     * @param persons 人物
     * @return
     */
    @PostMapping
    public ForePage<Persons> findPage(@RequestBody Persons persons) {
        int pageIndex = RequestUtils.getIntParam("pageIndex") == null ? 1
                : RequestUtils.getIntParam("pageIndex");
        int pageSize = RequestUtils.getIntParam("pageSize") == null ? 10
                : RequestUtils.getIntParam("pageSize");
        return personsService.findPage(persons, pageIndex, pageSize);
    }

    /**
     * 保存人物
     * @param persons 人物
     * @return
     */
    @PostMapping("save")
    public Msg save(@RequestBody Persons persons) {
        Msg msg = new Msg(false);

        // 参数验证
        if (persons == null) {
            msg.setMsg("参数错误");
            return msg;
        }

        if (persons.getCompanyId() == null) {
            msg.setMsg("参数错误, 公司编号不能为空");
            return msg;
        }

        if (StringUtil.isEmpty(persons.getName())) {
            msg.setMsg("参数错误, 人物名称不能为空");
            return msg;
        }

        // 取得上传文件
        String filePath = "";
        // 上传的图片
        if (!StringUtil.isEmpty(persons.getToken())) {
            List<Map<String, String>> fileList = RequestUtils.getSessionAttribte(persons.getToken());
            if (CollectionUtils.isEmpty(fileList)) {
                return new Msg(false,"识别文件上传失败!");
            }

            // 取得上传文件
            filePath = fileList.get(0).get("filePath");
        }


        // 保存人物
        return personsService.save(persons, filePath);
    }

    /**
     * 删除人物
     * @param persons 人物
     * @return
     */
    @PostMapping("delete")
    public Msg delete(@RequestBody Persons persons) {
        Msg msg = new Msg(false);

        // 参数验证
        if (persons == null || StringUtil.isEmpty(persons.getId())) {
            msg.setMsg("参数错误");
            return msg;
        }

        // 删除人物
        int flag = personsService.delete(persons);
        if (flag == 1) {
            msg.setSuccess(true);
            msg.setMsg("删除成功");
        } else {
            msg.setMsg("删除失败");
        }
        return msg;
    }

    /**
     * 查询人物图片
     * @return
     */
    @PostMapping("/findImages")
    public List<PersonsImage> findImages(@RequestBody JSONObject jsonObject) {
        String personId = jsonObject.getString("personId");
        // 参数验证
        if (StringUtil.isEmpty(personId)) {
            return null;
        }

        return personsService.findList(new PersonsImage(personId));
    }

    /**
     * 保存人物图片
     * @param personsImage 人物图片
     * @return
     */
    @PostMapping("insertImage")
    public Msg insertImage(@RequestBody PersonsImage personsImage) {
        Msg msg = new Msg(false);

        // 参数验证
        if (personsImage == null) {
            msg.setMsg("参数错误");
            return msg;
        }

        if (personsImage.getCompanyId() == null) {
            msg.setMsg("参数错误, 公司编号不能为空");
            return msg;
        }

        if (StringUtil.isEmpty(personsImage.getPoliticallyPersonsId())) {
            msg.setMsg("参数错误, 人物编号不能为空");
            return msg;
        }

        // 取得上传文件
        String filePath;
        // 上传的图片
        if (!StringUtil.isEmpty(personsImage.getToken())) {
            List<Map<String, String>> fileList = RequestUtils.getSessionAttribte(personsImage.getToken());
            if (CollectionUtils.isEmpty(fileList)) {
                return new Msg(false,"识别文件上传失败!");
            }

            // 取得上传文件
            filePath = fileList.get(0).get("filePath");
            personsImage.setPath(filePath);
            // 保存人物图片
            msg = personsService.insert(personsImage);

        }

        return msg;
    }

    /**
     * 删除人物图片
     * @param personsImage 人物图片
     * @return
     */
    @PostMapping("deleteImage")
    public Msg deleteImage(@RequestBody PersonsImage personsImage) {
        Msg msg = new Msg(false);

        // 参数验证
        if (personsImage == null || personsImage.getId() == null) {
            msg.setMsg("参数错误");
            return msg;
        }

        // 删除人物
        return personsService.delete(personsImage);
    }
}
